package com.github.itdachen.utils;

import com.github.itdachen.constants.UiStyleConstant;
import com.github.itdachen.sdk.vo.DevTableInfoVO;

import java.util.ArrayList;
import java.util.List;

/**
 * 获取模版
 *
 * @author 王大宸
 * @date 2024/4/3 22:11
 */
public class TemplatesResourcesUtils {

    public static List<String> getTemplateList(DevTableInfoVO tableInfoVo) {
        List<String> templates = new ArrayList<String>();
        String mvcType = tableInfoVo.getRearTemp();
        String uiStyle = tableInfoVo.getFrontUiStyle();

        /* DDD 领域模型设计 */
        if ("1".equals(tableInfoVo.getRearDdd())) {
            /* sdk */
            templates.add("templates/vm/java/ddd/sdk/dto/dto.java.vm");
            templates.add("templates/vm/java/ddd/sdk/vo/vo.java.vm");
            templates.add("templates/vm/java/ddd/sdk/query/query.java.vm");
            /* 对象转换映射 */
            templates.add("templates/vm/java/ddd/convert/convert.java.vm");
            /* 后端 java */
            templates.add("templates/vm/java/ddd/" + mvcType + "/entity/entity.java.vm");
            templates.add("templates/vm/java/ddd/" + mvcType + "/controller/controller.java.vm");
            templates.add("templates/vm/java/ddd/" + mvcType + "/service/service.java.vm");
            templates.add("templates/vm/java/ddd/" + mvcType + "/service/impl/serviceImpl.java.vm");
            templates.add("templates/vm/java/ddd/" + mvcType + "/mapper/mapper.java.vm");
            /* mybatis xml */
            templates.add("templates/vm/java/ddd/" + mvcType + "/xml/mapper.xml.vm");
        } else {
            /* 后端 java */
            if ("1".equals(tableInfoVo.getUseLombok())){
                templates.add("templates/vm/java/lombok/entity.java.vm");
            } else {
                // 后面修改的时候, 使用下面这个
                templates.add("templates/vm/java/mvc/" + mvcType + "/entity/entity.java.vm");
            }

            templates.add("templates/vm/java/mvc/" + mvcType + "/controller/controller.java.vm");
            templates.add("templates/vm/java/mvc/" + mvcType + "/service/service.java.vm");
            templates.add("templates/vm/java/mvc/" + mvcType + "/service/impl/serviceImpl.java.vm");
            templates.add("templates/vm/java/mvc/" + mvcType + "/mapper/mapper.java.vm");
            /* mybatis xml */
            templates.add("templates/vm/java/mvc/" + mvcType + "/xml/mapper.xml.vm");
        }

        /* 菜单 sql */
        templates.add("templates/vm/sql/menu.sql.vm");

        if ("".equals(uiStyle) || null == uiStyle) {
            uiStyle = UiStyleConstant.LAY_UI;
        }

        if (UiStyleConstant.NONE.equals(uiStyle)) {
            return templates;
        }

        if (UiStyleConstant.LAY_UI.equals(uiStyle)) {
            templates.add("templates/vm/html/add.html.vm");
            templates.add("templates/vm/html/edit.html.vm");
            templates.add("templates/vm/html/index.html.vm");
            templates.add("templates/vm/html/view.html.vm");
            templates.add("templates/vm/js/add.js.vm");
            templates.add("templates/vm/js/edit.js.vm");
            templates.add("templates/vm/js/index.js.vm");
        } else if (UiStyleConstant.VUE_ELEMENT.equals(uiStyle)) {
            /* 前后端分离 vue ElementUI */
            templates.add("templates/vm/vue/element/api.ts.vm");
            templates.add("templates/vm/vue/element/model.ts.vm");
            templates.add("templates/vm/vue/element/composables.ts.vm");
            templates.add("templates/vm/vue/element/index.vue.vm");
            templates.add("templates/vm/vue/element/ref.vue.vm");
        } else if (UiStyleConstant.VUE_LAY_UI.equals(uiStyle)) {
            /* 前后端分离 vue */
            templates.add("templates/vm/vue/layui/api.ts.vm");
            templates.add("templates/vm/vue/layui/model.ts.vm");
            templates.add("templates/vm/vue/layui/composables.ts.vm");
            templates.add("templates/vm/vue/layui/index.vue.vm");
            templates.add("templates/vm/vue/layui/ref.vue.vm");
        }

        return templates;
    }


}
